home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / motion.zip / DEFS.QC < prev    next >
Text File  |  1996-08-11  |  21KB  |  694 lines

  1.  
  2. /*
  3. ==============================================================================
  4.  
  5.             SOURCE FOR GLOBALVARS_T C STRUCTURE
  6.  
  7. ==============================================================================
  8. */
  9.  
  10. //
  11. // system globals
  12. //
  13. entity      self;
  14. entity      other;
  15. entity      world;
  16. float       time;
  17. float       frametime;
  18.  
  19. float       force_retouch;      // force all entities to touch triggers
  20.                                 // next frame.  this is needed because
  21.                                 // non-moving things don't normally scan
  22.                                 // for triggers, and when a trigger is
  23.                                 // created (like a teleport trigger), it
  24.                                 // needs to catch everything.
  25.                                 // decremented each frame, so set to 2
  26.                                 // to guarantee everything is touched
  27. string      mapname;
  28.  
  29. float       deathmatch;
  30. float       coop;
  31. float       teamplay;
  32.  
  33. float       serverflags;        // propagated from level to level, used to
  34.                                 // keep track of completed episodes
  35.  
  36. float       total_secrets;
  37. float       total_monsters;
  38.  
  39. float       found_secrets;      // number of secrets found
  40. float       killed_monsters;    // number of monsters killed
  41.  
  42.  
  43. // spawnparms are used to encode information about clients across server
  44. // level changes
  45. float       parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16;
  46.  
  47. //
  48. // global variables set by built in functions
  49. //  
  50. vector      v_forward, v_up, v_right;   // set by makevectors()
  51.     
  52. // set by traceline / tracebox
  53. float       trace_allsolid;
  54. float       trace_startsolid;
  55. float       trace_fraction;
  56. vector      trace_endpos;
  57. vector      trace_plane_normal;
  58. float       trace_plane_dist;
  59. entity      trace_ent;
  60. float       trace_inopen;
  61. float       trace_inwater;
  62.  
  63. entity      msg_entity;             // destination of single entity writes
  64.  
  65. //
  66. // required prog functions
  67. //
  68. void()      main;                       // only for testing
  69.  
  70. void()      StartFrame;
  71.  
  72. void()      PlayerPreThink;
  73. void()      PlayerPostThink;
  74.  
  75. void()      ClientKill;
  76. void()      ClientConnect;
  77. void()      PutClientInServer;      // call after setting the parm1... parms
  78. void()      ClientDisconnect;
  79.  
  80. void()      SetNewParms;            // called when a client first connects to
  81.                                     // a server. sets parms so they can be
  82.                                     // saved off for restarts
  83.  
  84. void()      SetChangeParms;         // call to set parms for self so they can
  85.                                     // be saved for a level transition
  86.  
  87.  
  88. //================================================
  89. void        end_sys_globals;        // flag for structure dumping
  90. //================================================
  91.  
  92. /*
  93. ==============================================================================
  94.  
  95.             SOURCE FOR ENTVARS_T C STRUCTURE
  96.  
  97. ==============================================================================
  98. */
  99.  
  100. //
  101. // system fields (*** = do not set in prog code, maintained by C code)
  102. //
  103. .float      modelindex;     // *** model index in the precached list
  104. .vector     absmin, absmax; // *** origin + mins / maxs
  105.  
  106. .float      ltime;          // local time for entity
  107. .float      movetype;
  108. .float      solid;
  109.  
  110. .vector     origin;         // ***
  111. .vector     oldorigin;      // ***
  112. .vector     velocity;
  113. .vector     angles;
  114. .vector     avelocity;
  115.  
  116. .vector     punchangle;     // temp angle adjust from damage or recoil
  117.  
  118. .string     classname;      // spawn function
  119. .string     model;
  120. .float      frame;
  121. .float      skin;
  122. .float      effects;
  123.  
  124. .vector     mins, maxs;     // bounding box extents reletive to origin
  125. .vector     size;           // maxs - mins
  126.  
  127. .void()     touch;
  128. .void()     use;
  129. .void()     think;
  130. .void()     blocked;        // for doors or plats, called when can't push other
  131.  
  132. .float      nextthink;
  133. .entity     groundentity;
  134.  
  135. // stats
  136. .float      health;
  137. .float      frags;
  138. .float      weapon;         // one of the IT_SHOTGUN, etc flags
  139. .string     weaponmodel;
  140. .float      weaponframe;
  141. .float      currentammo;
  142. .float      ammo_shells, ammo_nails, ammo_rockets, ammo_cells;
  143.  
  144. .float      items;          // bit flags
  145.  
  146. .float      takedamage;
  147. .entity     chain;
  148. .float      deadflag;
  149.  
  150. .vector     view_ofs;           // add to origin to get eye point
  151.  
  152.  
  153. .float      button0;        // fire
  154. .float      button1;        // use
  155. .float      button2;        // jump
  156.  
  157. .float      impulse;        // weapon changes
  158.  
  159. .float      fixangle;
  160. .vector     v_angle;        // view / targeting angle for players
  161. .float      idealpitch;     // calculated pitch angle for lookup up slopes
  162.  
  163.  
  164. .string     netname;
  165.  
  166. .entity     enemy;
  167.  
  168. .float      flags;
  169.  
  170. .float      colormap;
  171. .float      team;
  172.  
  173. .float      max_health;     // players maximum health is stored here
  174.  
  175. .float      teleport_time;  // don't back up
  176.  
  177. .float      armortype;      // save this fraction of incoming damage
  178. .float      armorvalue;
  179.  
  180. .float      waterlevel;     // 0 = not in, 1 = feet, 2 = wast, 3 = eyes
  181. .float      watertype;      // a contents value
  182.  
  183. .float      ideal_yaw;
  184. .float      yaw_speed;
  185.  
  186. .entity     aiment;
  187.  
  188. .entity     goalentity;     // a movetarget or an enemy
  189.  
  190. .float      spawnflags;
  191.  
  192. .string     target;
  193. .string     targetname;
  194.  
  195. // damage is accumulated through a frame. and sent as one single
  196. // message, so the super shotgun doesn't generate huge messages
  197. .float      dmg_take;
  198. .float      dmg_save;
  199. .entity     dmg_inflictor;
  200.  
  201. .entity     owner;      // who launched a missile
  202. .vector     movedir;    // mostly for doors, but also used for waterjump
  203.  
  204. .string     message;        // trigger messages
  205.  
  206. .float      sounds;     // either a cd track number or sound number
  207.  
  208. .string     noise, noise1, noise2, noise3;  // contains names of wavs to play
  209.  
  210. //================================================
  211. void        end_sys_fields;         // flag for structure dumping
  212. //================================================
  213.  
  214. /*
  215. ==============================================================================
  216.  
  217.                 VARS NOT REFERENCED BY C CODE
  218.  
  219. ==============================================================================
  220. */
  221.  
  222.  
  223. //
  224. // constants
  225. //
  226.  
  227. float   FALSE                   = 0;
  228. float   TRUE                    = 1;
  229.  
  230. // edict.flags
  231. float   FL_FLY                  = 1;
  232. float   FL_SWIM                 = 2;
  233. float   FL_CLIENT               = 8;    // set for all client edicts
  234. float   FL_INWATER              = 16;   // for enter / leave water splash
  235. float   FL_MONSTER              = 32;
  236. float   FL_GODMODE              = 64;   // player cheat
  237. float   FL_NOTARGET             = 128;  // player cheat
  238. float   FL_ITEM                 = 256;  // extra wide size for bonus items
  239. float   FL_ONGROUND             = 512;  // standing on something
  240. float   FL_PARTIALGROUND        = 1024; // not all corners are valid
  241. float   FL_WATERJUMP            = 2048; // player jumping out of water
  242. float   FL_JUMPRELEASED         = 4096; // for jump debouncing
  243.  
  244. // edict.movetype values
  245. float   MOVETYPE_NONE           = 0;    // never moves
  246. //float MOVETYPE_ANGLENOCLIP    = 1;
  247. //float MOVETYPE_ANGLECLIP      = 2;
  248. float   MOVETYPE_WALK           = 3;    // players only
  249. float   MOVETYPE_STEP           = 4;    // discrete, not real time unless fall
  250. float   MOVETYPE_FLY            = 5;
  251. float   MOVETYPE_TOSS           = 6;    // gravity
  252. float   MOVETYPE_PUSH           = 7;    // no clip to world, push and crush
  253. float   MOVETYPE_NOCLIP         = 8;
  254. float   MOVETYPE_FLYMISSILE     = 9;    // fly with extra size against monsters
  255. float   MOVETYPE_BOUNCE         = 10;
  256. float   MOVETYPE_BOUNCEMISSILE  = 11;   // bounce with extra size
  257.  
  258. // edict.solid values
  259. float   SOLID_NOT               = 0;    // no interaction with other objects
  260. float   SOLID_TRIGGER           = 1;    // touch on edge, but not blocking
  261. float   SOLID_BBOX              = 2;    // touch on edge, block
  262. float   SOLID_SLIDEBOX          = 3;    // touch on edge, but not an onground
  263. float   SOLID_BSP               = 4;    // bsp clip, touch on edge, block
  264.  
  265. // range values
  266. float   RANGE_MELEE             = 0;
  267. float   RANGE_NEAR              = 1;
  268. float   RANGE_MID               = 2;
  269. float   RANGE_FAR               = 3;
  270.  
  271. // deadflag values
  272.  
  273. float   DEAD_NO                 = 0;
  274. float   DEAD_DYING              = 1;
  275. float   DEAD_DEAD               = 2;
  276. float   DEAD_RESPAWNABLE        = 3;
  277.  
  278. // takedamage values
  279.  
  280. float   DAMAGE_NO               = 0;
  281. float   DAMAGE_YES              = 1;
  282. float   DAMAGE_AIM              = 2;
  283.  
  284. // items
  285. float   IT_AXE                  = 4096;
  286. float   IT_SHOTGUN              = 1;
  287. float   IT_SUPER_SHOTGUN        = 2;
  288. float   IT_NAILGUN              = 4;
  289. float   IT_SUPER_NAILGUN        = 8;
  290. float   IT_GRENADE_LAUNCHER     = 16;
  291. float   IT_ROCKET_LAUNCHER      = 32;
  292. float   IT_LIGHTNING            = 64;
  293. float   IT_EXTRA_WEAPON         = 128;
  294.  
  295. float   IT_SHELLS               = 256;
  296. float   IT_NAILS                = 512;
  297. float   IT_ROCKETS              = 1024;
  298. float   IT_CELLS                = 2048;
  299.  
  300. float   IT_ARMOR1               = 8192;
  301. float   IT_ARMOR2               = 16384;
  302. float   IT_ARMOR3               = 32768;
  303. float   IT_SUPERHEALTH          = 65536;
  304.  
  305. float   IT_KEY1                 = 131072;
  306. float   IT_KEY2                 = 262144;
  307.  
  308. float   IT_INVISIBILITY         = 524288;
  309. float   IT_INVULNERABILITY      = 1048576;
  310. float   IT_SUIT                 = 2097152;
  311. float   IT_QUAD                 = 4194304;
  312.  
  313. // point content values
  314.  
  315. float   CONTENT_EMPTY           = -1;
  316. float   CONTENT_SOLID           = -2;
  317. float   CONTENT_WATER           = -3;
  318. float   CONTENT_SLIME           = -4;
  319. float   CONTENT_LAVA            = -5;
  320. float   CONTENT_SKY             = -6;
  321.  
  322. float   STATE_TOP       = 0;
  323. float   STATE_BOTTOM    = 1;
  324. float   STATE_UP        = 2;
  325. float   STATE_DOWN      = 3;
  326.  
  327. vector  VEC_ORIGIN = '0 0 0';
  328. vector  VEC_HULL_MIN = '-16 -16 -24';
  329. vector  VEC_HULL_MAX = '16 16 32';
  330.  
  331. vector  VEC_HULL2_MIN = '-32 -32 -24';
  332. vector  VEC_HULL2_MAX = '32 32 64';
  333.  
  334. // protocol bytes
  335. float   SVC_TEMPENTITY      = 23;
  336. float   SVC_KILLEDMONSTER   = 27;
  337. float   SVC_FOUNDSECRET     = 28;
  338. float   SVC_INTERMISSION    = 30;
  339. float   SVC_FINALE          = 31;
  340. float   SVC_CDTRACK         = 32;
  341. float   SVC_SELLSCREEN      = 33;
  342.  
  343.  
  344. float   TE_SPIKE        = 0;
  345. float   TE_SUPERSPIKE   = 1;
  346. float   TE_GUNSHOT      = 2;
  347. float   TE_EXPLOSION    = 3;
  348. float   TE_TAREXPLOSION = 4;
  349. float   TE_LIGHTNING1   = 5;
  350. float   TE_LIGHTNING2   = 6;
  351. float   TE_WIZSPIKE     = 7;
  352. float   TE_KNIGHTSPIKE  = 8;
  353. float   TE_LIGHTNING3   = 9;
  354. float   TE_LAVASPLASH   = 10;
  355. float   TE_TELEPORT     = 11;
  356.  
  357. // sound channels
  358. // channel 0 never willingly overrides
  359. // other channels (1-7) allways override a playing sound on that channel
  360. float   CHAN_AUTO       = 0;
  361. float   CHAN_WEAPON     = 1;
  362. float   CHAN_VOICE      = 2;
  363. float   CHAN_ITEM       = 3;
  364. float   CHAN_BODY       = 4;
  365.  
  366. float   ATTN_NONE       = 0;
  367. float   ATTN_NORM       = 1;
  368. float   ATTN_IDLE       = 2;
  369. float   ATTN_STATIC     = 3;
  370.  
  371. // update types
  372.  
  373. float   UPDATE_GENERAL  = 0;
  374. float   UPDATE_STATIC   = 1;
  375. float   UPDATE_BINARY   = 2;
  376. float   UPDATE_TEMP     = 3;
  377.  
  378. // entity effects
  379.  
  380. float   EF_BRIGHTFIELD  = 1;
  381. float   EF_MUZZLEFLASH  = 2;
  382. float   EF_BRIGHTLIGHT  = 4;
  383. float   EF_DIMLIGHT     = 8;
  384.  
  385.  
  386. // messages
  387. float   MSG_BROADCAST   = 0;        // unreliable to all
  388. float   MSG_ONE         = 1;        // reliable to one (msg_entity)
  389. float   MSG_ALL         = 2;        // reliable to all
  390. float   MSG_INIT        = 3;        // write to the init string
  391.  
  392. //================================================
  393.  
  394. //
  395. // globals
  396. //
  397. float   movedist;
  398. float   gameover;       // set when a rule exits
  399.  
  400. string  string_null;    // null string, nothing should be held here
  401. float   empty_float;
  402.  
  403. entity  newmis;         // launch_spike sets this after spawning it
  404.  
  405. entity  activator;      // the entity that activated a trigger or brush
  406.  
  407. entity  damage_attacker;    // set by T_Damage
  408. float   framecount;
  409.  
  410. float       skill;
  411.  
  412. //================================================
  413.  
  414. //
  415. // world fields (FIXME: make globals)
  416. //
  417. .string     wad;
  418. .string     map;
  419. .float      worldtype;  // 0=medieval 1=metal 2=base
  420.  
  421. //================================================
  422.  
  423. .string     killtarget;
  424.  
  425. //
  426. // quakeed fields
  427. //
  428. .float      light_lev;      // not used by game, but parsed by light util
  429. .float      style;
  430.  
  431.  
  432. //
  433. // monster ai
  434. //
  435. .void()     th_stand;
  436. .void()     th_walk;
  437. .void()     th_run;
  438. .void()     th_missile;
  439. .void()     th_melee;
  440. .void(entity attacker, float damage)        th_pain;
  441. .void()     th_die;
  442.  
  443. .entity     oldenemy;       // mad at this player before taking damage
  444.  
  445. .float      speed;
  446.  
  447. .float  lefty;
  448.  
  449. .float  search_time;
  450. .float  attack_state;
  451.  
  452. float   AS_STRAIGHT     = 1;
  453. float   AS_SLIDING      = 2;
  454. float   AS_MELEE        = 3;
  455. float   AS_MISSILE      = 4;
  456.  
  457. //
  458. // player only fields
  459. //
  460. .float      walkframe;
  461.  
  462. .float      attack_finished;
  463. .float      pain_finished;
  464.  
  465. .float      invincible_finished;
  466. .float      invisible_finished;
  467. .float      super_damage_finished;
  468. .float      radsuit_finished;
  469.  
  470. .float      invincible_time, invincible_sound;
  471. .float      invisible_time, invisible_sound;
  472. .float      super_time, super_sound;
  473. .float      rad_time;
  474. .float      fly_sound;
  475.  
  476. .float      axhitme;
  477.  
  478. .float      show_hostile;   // set to time+0.2 whenever a client fires a
  479.                             // weapon or takes damage.  Used to alert
  480.                             // monsters that otherwise would let the player go
  481. .float      jump_flag;      // player jump flag
  482. .float      swim_flag;      // player swimming sound flag
  483. .float      air_finished;   // when time > air_finished, start drowning
  484. .float      bubble_count;   // keeps track of the number of bubbles
  485. .string     deathtype;      // keeps track of how the player died
  486.  
  487. //
  488. // object stuff
  489. //
  490. .string     mdl;
  491. .vector     mangle;         // angle at start
  492.  
  493. .vector     oldorigin;      // only used by secret door
  494.  
  495. .float      t_length, t_width;
  496.  
  497.  
  498. //
  499. // doors, etc
  500. //
  501. .vector     dest, dest1, dest2;
  502. .float      wait;           // time from firing to restarting
  503. .float      delay;          // time from activation to firing
  504. .entity     trigger_field;  // door's trigger entity
  505. .string     noise4;
  506.  
  507. //
  508. // monsters
  509. //
  510. .float      pausetime;
  511. .entity     movetarget;
  512.  
  513.  
  514. //
  515. // doors
  516. //
  517. .float      aflag;
  518. .float      dmg;            // damage done by door when hit
  519.     
  520. //
  521. // misc
  522. //
  523. .float      cnt;            // misc flag
  524.     
  525. //
  526. // subs
  527. //
  528. .void()     think1;
  529. .vector     finaldest, finalangle;
  530.  
  531. //
  532. // triggers
  533. //
  534. .float      count;          // for counting triggers
  535.  
  536.  
  537. //
  538. // plats / doors / buttons
  539. //
  540. .float      lip;
  541. .float      state;
  542. .vector     pos1, pos2;     // top and bottom positions
  543. .float      height;
  544.  
  545. //
  546. // sounds
  547. //
  548. .float      waitmin, waitmax;
  549. .float      distance;
  550. .float      volume;
  551.  
  552.  
  553.  
  554.  
  555. //===========================================================================
  556.     
  557.  
  558. //
  559. // builtin functions
  560. //
  561.  
  562. void(vector ang)    makevectors     = #1;       // sets v_forward, etc globals
  563. void(entity e, vector o) setorigin  = #2;
  564. void(entity e, string m) setmodel   = #3;       // set movetype and solid first
  565. void(entity e, vector min, vector max) setsize = #4;
  566. // #5 was removed
  567. void() break                        = #6;
  568. float() random                      = #7;       // returns 0 - 1
  569. void(entity e, float chan, string samp, float vol, float atten) sound = #8;
  570. vector(vector v) normalize          = #9;
  571. void(string e) error                = #10;
  572. void(string e) objerror             = #11;
  573. float(vector v) vlen                = #12;
  574. float(vector v) vectoyaw            = #13;
  575. entity() spawn                      = #14;
  576. void(entity e) remove               = #15;
  577.  
  578. // sets trace_* globals
  579. // nomonsters can be:
  580. // An entity will also be ignored for testing if forent == test,
  581. // forent->owner == test, or test->owner == forent
  582. // a forent of world is ignored
  583. void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;    
  584.  
  585. entity() checkclient                = #17;  // returns a client to look for
  586. entity(entity start, .string fld, string match) find = #18;
  587. string(string s) precache_sound     = #19;
  588. string(string s) precache_model     = #20;
  589. void(entity client, string s)stuffcmd = #21;
  590. entity(vector org, float rad) findradius = #22;
  591. void(string s) bprint               = #23;
  592. void(entity client, string s) sprint = #24;
  593. void(string s) dprint               = #25;
  594. string(float f) ftos                = #26;
  595. string(vector v) vtos               = #27;
  596. void() coredump                     = #28;      // prints all edicts
  597. void() traceon                      = #29;      // turns statment trace on
  598. void() traceoff                     = #30;
  599. void(entity e) eprint               = #31;      // prints an entire edict
  600. float(float yaw, float dist) walkmove   = #32;  // returns TRUE or FALSE
  601. // #33 was removed
  602. float(float yaw, float dist) droptofloor= #34;  // TRUE if landed on floor
  603. void(float style, string value) lightstyle = #35;
  604. float(float v) rint                 = #36;      // round to nearest int
  605. float(float v) floor                = #37;      // largest integer <= v
  606. float(float v) ceil                 = #38;      // smallest integer >= v
  607. // #39 was removed
  608. float(entity e) checkbottom         = #40;      // true if self is on ground
  609. float(vector v) pointcontents       = #41;      // returns a CONTENT_*
  610. // #42 was removed
  611. float(float f) fabs = #43;
  612. vector(entity e, float speed) aim = #44;        // returns the shooting vector
  613. float(string s) cvar = #45;                     // return cvar.value
  614. void(string s) localcmd = #46;                  // put string into local que
  615. entity(entity e) nextent = #47;                 // for looping through all ents
  616. void(vector o, vector d, float color, float count) particle = #48;// start a particle effect
  617. void() ChangeYaw = #49;                     // turn towards self.ideal_yaw
  618.                                             // at self.yaw_speed
  619. // #50 was removed
  620. vector(vector v) vectoangles            = #51;
  621.  
  622. //
  623. // direct client message generation
  624. //
  625. void(float to, float f) WriteByte       = #52;
  626. void(float to, float f) WriteChar       = #53;
  627. void(float to, float f) WriteShort      = #54;
  628. void(float to, float f) WriteLong       = #55;
  629. void(float to, float f) WriteCoord      = #56;
  630. void(float to, float f) WriteAngle      = #57;
  631. void(float to, string s) WriteString    = #58;
  632. void(float to, entity s) WriteEntity    = #59;
  633.  
  634. //
  635. // broadcast client message generation
  636. //
  637.  
  638. // void(float f) bWriteByte     = #59;
  639. // void(float f) bWriteChar     = #60;
  640. // void(float f) bWriteShort        = #61;
  641. // void(float f) bWriteLong     = #62;
  642. // void(float f) bWriteCoord        = #63;
  643. // void(float f) bWriteAngle        = #64;
  644. // void(string s) bWriteString  = #65;
  645. // void(entity e) bWriteEntity = #66;
  646.  
  647. void(float step) movetogoal             = #67;
  648.  
  649. string(string s) precache_file      = #68;  // no effect except for -copy
  650. void(entity e) makestatic       = #69;
  651. void(string s) changelevel = #70;
  652.  
  653. //#71 was removed
  654.  
  655. void(string var, string val) cvar_set = #72;    // sets cvar.value
  656.  
  657. void(entity client, string s) centerprint = #73;    // sprint, but in middle
  658.  
  659. void(vector pos, string samp, float vol, float atten) ambientsound = #74;
  660.  
  661. string(string s) precache_model2    = #75;      // registered version only
  662. string(string s) precache_sound2    = #76;      // registered version only
  663. string(string s) precache_file2     = #77;      // registered version only
  664.  
  665. void(entity e) setspawnparms        = #78;      // set parm1... to the
  666.                                                 // values at level start
  667.                                                 // for coop respawn
  668.  
  669. //============================================================================
  670.  
  671. //
  672. // subs.qc
  673. //
  674. void(vector tdest, float tspeed, void() func) SUB_CalcMove;
  675. void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt;
  676. void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove;
  677. void()  SUB_CalcMoveDone;
  678. void() SUB_CalcAngleMoveDone;
  679. void() SUB_Null;
  680. void() SUB_UseTargets;
  681. void() SUB_Remove;
  682.  
  683. //
  684. //  combat.qc
  685. //
  686. void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;
  687.  
  688.  
  689. float (entity e, float healamount, float ignore) T_Heal; // health function
  690.  
  691. float(entity targ, entity inflictor) CanDamage;
  692.  
  693. .float moving_now;
  694.